package com.jxd.project.travel.controller;

import com.jxd.project.travel.common.Result;
import com.jxd.project.travel.util.FileDeleteUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.UUID;

/**
 * @ClassName PictureController
 * @Description TODO
 * @Author 邢子剑
 * @Date 2025/10/7 上午10:33
 * @Version 1.0
 */
@RestController
public class PictureController {
    // 从配置文件读取上传路径和访问前缀
    @Value("${file.upload-path}")
    private String uploadPath;
    @Value("${file.access-path}")
    private String accessPath;

    @Autowired
    private FileDeleteUtil fileDeleteUtil; // 图片删除工具

    /**
     * 图片上传接口（对应前端el-upload的action="/addPicture"）
     */
    @PostMapping("/addPicture")
    public Result uploadPicture(@RequestParam("file") MultipartFile file) {
        // 1. 校验文件是否为空
        if (file.isEmpty()) {
            return Result.error("请选择上传的图片");
        }

        // 2. 校验文件类型（前端已校验，后端二次校验）
        String originalFilename = file.getOriginalFilename();
        if (originalFilename == null) {
            return Result.error("文件名异常");
        }
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        if (!suffix.equalsIgnoreCase(".jpg") && !suffix.equalsIgnoreCase(".png")) {
            return Result.error("仅支持JPG、PNG格式图片");
        }

        // 3. 生成唯一文件名（避免重复覆盖）
        String fileName = UUID.randomUUID().toString() + suffix; // UUID+后缀名

        // 4. 构建绝对路径（关键修改）
        // 获取项目根目录（例如：D:\workspace\travel-project）
        String projectRoot = System.getProperty("user.dir");
        // 拼接配置的上传路径（com/jxd/image/），得到完整绝对路径
        String absoluteUploadPath = projectRoot + File.separator + uploadPath;
        // 创建文件对象（确保路径分隔符正确，适配Windows/Linux）
        File dest = new File(absoluteUploadPath + fileName);

        try {
            // 确保父目录存在（关键：自动创建多级目录）
            if (!dest.getParentFile().exists()) {
                // 递归创建所有不存在的父目录
                boolean isDirCreated = dest.getParentFile().mkdirs();
                if (!isDirCreated) {
                    return Result.error("创建存储目录失败：" + dest.getParentFile().getAbsolutePath());
                }
            }
            // 保存文件
            file.transferTo(dest);
        } catch (IOException e) {
            e.printStackTrace();
            return Result.error("图片上传失败：" + e.getMessage());
        }

        // 5. 构建图片访问URL（基于资源映射的访问路径）
        // 格式：http://localhost:8086/image/xxx.jpg（与WebMvcConfig的映射规则一致）
        String imageUrl = "http://localhost:8083" + accessPath.replace("**", "") + fileName;

        // 6. 返回成功响应（包含图片URL）
        return Result.success(imageUrl);
    }

    /**
     * 单个删除图片（供前端调用）
     * @param param 包含imageUrl字段的Map
     */
    @PostMapping("/deleteTicketImage")
    public Result deleteTicketImage(@RequestBody Map<String, String> param) {
        String imageUrl = param.get("imageUrl");
        if (imageUrl == null || imageUrl.trim().isEmpty()) {
            return Result.error("图片URL不能为空");
        }

        boolean isDeleted = fileDeleteUtil.deleteImageByUrl(imageUrl);
        return isDeleted ? Result.success("图片删除成功") : Result.error("图片删除失败");
    }

    @PostMapping("/deleteGoodsImage")
    public Result deleteGoodsImage(@RequestBody Map<String, String> param) {
        String imageUrl = param.get("imageUrl");
        if (imageUrl == null || imageUrl.trim().isEmpty()) {
            return Result.error("图片URL不能为空");
        }

        boolean isDeleted = fileDeleteUtil.deleteImageByUrl(imageUrl);
        return isDeleted ? Result.success("图片删除成功") : Result.error("图片删除失败");
    }


}
